#include <stdio.h>
#include <string.h>
// 写数据
// int main() {
//     FILE* fp = fopen("text.txt", "a");
//     if(fp == NULL) {
//         perror("fopen");
//         return 1;
//     }
//     const char* message = "Hello World!\n";
//     fprintf(fp, "%s", message);
//     // fwrite(fp, strlen(message), 1, stdout); // 写入二进制数据，第一个参数是要写入的数据块的指针，
//     // 第二个参数是我们的每个元素的字节大小，第三个就是第二参数的个数了，第四个就是我们要写入的文件
//     fclose(fp);
//     return 0;
// }


// 读数据
// int main(int argc, char* argv[]) {
//     if(argc != 2) {
//         printf("usage: %s filename\n", argv[0]);
//         return 1;
//     }
//     FILE* fp = fopen(argv[1], "r");
//     if(fp == NULL) {
//         perror("fopen");
//         return 2;
//     }
//     while(1) {
//         char buffer[128];
//         memset(buffer, 0, sizeof(buffer)); // 清空缓冲区
//         int size = fread(buffer, 1, sizeof(buffer) - 1, fp); // 读取内容，第一个参数就是要存入的内存地址，第二个参数表示的是元素大小
//         // 第三个参数是元素的个数，第四个参数就是从哪里读入（文件指针），这里的返回值是元素的个数这样写就是错的fread(buffer, sizeof(buffer) - 1, 1, fp);返回0
//         if(size > 0) {
//             printf("%s", buffer);
//         }else {
//             printf("No data read or error occurred\n");
//         }
//         if(feof(fp)) // 判断是不是读到了文件的末尾位置
//         {
//             break;
//         }
//     }
//     fclose(fp);
//     return 0;
// }


// 写数据
int main(int argc, char* argv[]) {
    if(argc != 2) {
        printf("usage: %s filename\n", argv[0]);
        return 1;
    }
    FILE* fp = fopen(argv[1], "w");
    if(fp == NULL) {
        perror("fopen");
        return 1;
    }
    const char* message = "Hello World: ";
    int count = 1;
    while (count <= 10) {
        char buffer[1024];
        snprintf(buffer, sizeof(buffer), "%s%d\n", message, count++);
        fwrite(buffer, strlen(buffer), 1, fp);
    }
    fclose(fp);
    return 0;
}